package com.zust.zst.studentstatus.service;

import com.zust.zst.common.dto.chooselesson.AddCourseDTO;
import com.zust.zst.common.dto.studentstatus.*;
import com.zust.zst.common.vo.chooselesson.CourseInfoVO;
import com.zust.zst.common.vo.studentstatus.StudentInfoVO;
import com.zust.zst.common.vo.studentstatus.StudentUpdateVO;

import java.util.List;

/**
 * 学生信息管理服务层
 *
 * @author ldnb
 * @date 2022/11/24 16:07
 */
public interface StudentInfoManagementService {

    /**
     * 获取当前教务所属学院的所有专业名
     *
     * @param uid 当前教务的工号
     * @return 已添加的当前教务所属学院的专业
     */
    List<String> getAllMajors(int uid);

    /**
     *  获取当前所选专业的所有班级名
     *
     * @param majorDTO 当前所选专业
     * @return 已添加的当前所选专业的所有班级
     */
    List<String> getAllMajorClazzs(MajorToSelectClazzDTO majorDTO);

    /**
     * 添加学生学籍信息
     *
     * @param uid           当前教务的工号
     * @param addStudentDTO 学生学籍信息
     * @return 0-添加失败；其他数字-添加成功
     */
    int addStudent(int uid, AddStudentDTO addStudentDTO);

    /**
     * 获取当前教务/管理员所属学院的全部学生
     *
     * @param uid 当前教务的工号
     * @param dto 分页信息
     * @return 获取到的当前教务/管理员所属学院的全部学生
     */
    List<StudentInfoVO> getCollegeStudent(int uid, SearchCollegeStudentDTO dto);

    /**
     * 获取当前教务/管理员所属学院的全部学生信息条数
     *
     * @param uid 当前教务的工号
     * @return 获取到的当前教务/管理员所属学院的学生信息条数
     */
    int getTotalLineCollegeStudent(int uid);

    /**
     * 获得对应学号、姓名的本院学生信息
     *
     * @param uid 当前教务的工号
     * @param dto 学号、姓名和分页信息
     * @return 对应学号、姓名的本院学生信息
     */
    List<StudentInfoVO> getCollegeStudentByUidAndName(int uid, SearchCollegeStudentByUidAndNameDTO dto);

    /**
     * 获得对应学号、姓名的本院学生信息条数
     *
     * @param uid 当前教务的工号
     * @param dto   学号、姓名信息
     * @return 获取到的对应学号、姓名的本院学生信息条数
     */
    int getTotalLineCollegeStudentByUidAndName(int uid, SearchTotalCollegeStudentByUidAndNameDTO dto);

    /**
     * 更新学生信息
     *
     * @param studentUpdateVO 更新的学生信息
     * @return 更新操作状态
     */
    int updateStudent(StudentUpdateVO studentUpdateVO);
}
